package xrate

import (
	"gitee.com/xiaoyutab/xgotool/optional/xcache"
	"gitee.com/xiaoyutab/xgotool/xerror"
)

// 批次列表信息
//
//	user_id		用户ID 0-不过滤
//	status		状态 0-草稿 1-已发布（禁止修改） 2-已归档
//	offset		跳过条数
//	limit		查询条数
//	start_time	开始时间（含）
//	end_time	结束时间（不含）
func BatchList(user_id uint, status uint8, offset, limit int, start_time, end_time string) (int64, []Batch, error) {
	if _default.DB == nil {
		return 0, nil, xerror.New("数据库未连接")
	}
	db := _default.DB.Table(_default.BatchName).Where("status", status)
	if user_id > 0 {
		db = db.Where("user_id", user_id)
	}
	if start_time != "" {
		db = db.Where("start_time >= ?", start_time)
	}
	if end_time != "" {
		db = db.Where("end_time < ?", end_time)
	}
	var count int64
	err := db.Count(&count).Error
	if err != nil {
		return 0, nil, err
	}
	lis := []Batch{}
	if count == 0 {
		return 0, lis, nil
	}
	err = db.Offset(offset).Limit(limit).Find(&lis).Error
	if err != nil {
		return 0, lis, err
	}
	// 写入缓存
	for i := 0; i < len(lis); i++ {
		xcache.SetStruct(xcache.Key("xrate.batch_info", lis[i].ID), lis[i])
	}
	return count, lis, nil
}
